package com.spider.gp.processor;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.spider.gp.constant.UrlConstant;
import com.spider.gp.dao.HangYe;
import com.spider.gp.dao.HangYeDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * description:
 *
 * @author clare
 * @date 2022/05/20 08:56
 **/
@Component
public class HangyeProcessor implements PageProcessor {
    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);

    @Autowired
    private HangYeDao hangYeDao;

    @Override
    public void process(Page page) {
        SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd");
        String reportTime =formatter.format(new Date());

        LambdaQueryWrapper<HangYe> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(HangYe::getReportTime, reportTime);
        HangYe hangYe = null;
        hangYe =   hangYeDao.selectOne(wrapper);
        if (hangYe == null){
            hangYeDao.insert(HangYe.builder().reportTime(reportTime).build());
        }
        //行业涨幅榜 f3 -涨跌幅 ,f8-换手率,f14-行业,f128-领涨股,f140-领涨股编码,f136-领涨股涨幅,f104-涨的家数,f105-跌的家数 f207 领跌 f222 领跌跌幅 f208-领跌股编码
        StringBuffer bufferHY = new StringBuffer(); //行业
        StringBuffer bufferXQ = new StringBuffer(); //详情
        StringBuffer bufferLZG = new StringBuffer(); // 领涨股
        StringBuffer bufferLDG = new StringBuffer(); // 领跌股

        List<String> all = page.getJson().jsonPath("$.data.diff").all();


        if (page.getUrl().toString().equals(UrlConstant.DFCF_HANG_YE_ZF)) {
            for (String item : all) {
                HashMap hashMap = JSON.parseObject(item, HashMap.class);
                bufferHY.append(hashMap.get("f14")).append(" ").append("涨幅").append(hashMap.get("f3") + "%").append("|");
                bufferXQ.append("涨/跌家：").append(hashMap.get("f104")).append("/").append(hashMap.get("f105")).append(" ").append("换手率：").append(hashMap.get("f8") + "%").append("|");
                bufferLZG.append(hashMap.get("f140")).append(" ").append(hashMap.get("f128")).append(" ").append(hashMap.get("f136") + "%").append("|");
                bufferLDG.append(hashMap.get("f208")).append(" ").append(hashMap.get("f207")).append(" ").append(hashMap.get("f222") + "%").append("|");
            }

            hangYeDao.updateById(HangYe.builder().reportTime(reportTime).hyZf(bufferHY.toString()).hyZfJsRate(bufferXQ.toString()).hyZfLzg(bufferLZG.toString()).hyZfLdg(bufferLDG.toString()).build());

        }

        if (page.getUrl().toString().equals(UrlConstant.DFCF_HANG_YE_DF)) {
            for (String item : all) {
                HashMap hashMap = JSON.parseObject(item, HashMap.class);
                bufferHY.append(hashMap.get("f14")).append(" ").append("涨幅").append(hashMap.get("f3") + "%").append("|");
                bufferXQ.append("涨/跌家：").append(hashMap.get("f104")).append("/").append(hashMap.get("f105")).append(" ").append("换手率：").append(hashMap.get("f8") + "%").append("|");
                bufferLZG.append(hashMap.get("f140")).append(" ").append(hashMap.get("f128")).append(" ").append(hashMap.get("f136") + "%").append("|");
                bufferLDG.append(hashMap.get("f208")).append(" ").append(hashMap.get("f207")).append(" ").append(hashMap.get("f222") + "%").append("|");
            }
            hangYe.setHyDf(bufferHY.toString());
            hangYe.setHyDfJsRate(bufferXQ.toString());
            hangYe.setHyDfLzg(bufferLZG.toString());
            hangYe.setHyDfLdg(bufferLDG.toString());

            hangYeDao.updateById(HangYe.builder().reportTime(reportTime).hyDf(bufferHY.toString()).hyDfJsRate(bufferXQ.toString()).hyDfLzg(bufferLZG.toString()).hyDfLdg(bufferLDG.toString()).build());
        }

        if (page.getUrl().toString().equals(UrlConstant.DFCF_GAI_NIAN_HANG_YE_ZF)) {
            for (String item : all) {
                HashMap hashMap = JSON.parseObject(item, HashMap.class);
                bufferHY.append(hashMap.get("f14")).append(" ").append("涨幅").append(hashMap.get("f3") + "%").append("|");
                bufferXQ.append("涨/跌家：").append(hashMap.get("f104")).append("/").append(hashMap.get("f105")).append(" ").append("换手率：").append(hashMap.get("f8") + "%").append("|");
                bufferLZG.append(hashMap.get("f140")).append(" ").append(hashMap.get("f128")).append(" ").append(hashMap.get("f136") + "%").append("|");
                bufferLDG.append(hashMap.get("f208")).append(" ").append(hashMap.get("f207")).append(" ").append(hashMap.get("f222") + "%").append("|");
            }

            hangYeDao.updateById(HangYe.builder().reportTime(reportTime).gnZf(bufferHY.toString()).gnZfJsRate(bufferXQ.toString()).gnZfLzg(bufferLZG.toString()).gnZfLdg(bufferLDG.toString()).build());
        }

        if (page.getUrl().toString().equals(UrlConstant.DFCF_GAI_NIAN_HANG_YE_DF)) {
            for (String item : all) {
                HashMap hashMap = JSON.parseObject(item, HashMap.class);
                bufferHY.append(hashMap.get("f14")).append(" ").append("涨幅").append(hashMap.get("f3") + "%").append("|");
                bufferXQ.append("涨/跌家：").append(hashMap.get("f104")).append("/").append(hashMap.get("f105")).append(" ").append("换手率：").append(hashMap.get("f8") + "%").append("|");
                bufferLZG.append(hashMap.get("f140")).append(" ").append(hashMap.get("f128")).append(" ").append(hashMap.get("f136") + "%").append("|");
                bufferLDG.append(hashMap.get("f208")).append(" ").append(hashMap.get("f207")).append(" ").append(hashMap.get("f222") + "%").append("|");
            }
            hangYeDao.updateById(HangYe.builder().reportTime(reportTime).gnDf(bufferHY.toString()).gnDfJsRate(bufferXQ.toString()).gnDfLzg(bufferLZG.toString()).gnDfLdg(bufferLDG.toString()).build());
        }

    }

    @Override
    public Site getSite() {
        return site;
    }
}








